﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ext.Net;
using IMDTO;
using IMBL;

namespace IMPPFront.Management
{
    public partial class Metadata : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!X.IsAjaxRequest || !IsPostBack)
            {
                //get data
                List<IMDTOFunctieRol> functieRollen = IMBLMetadata.GetAllFunctieRollen();
                List<IMDTORefCodeDetail> frKaders = IMBLMetadata.GetAllFunctieRolKaders();
                List<IMDTORefCodeDetail> frFamilies = IMBLMetadata.GetAllFunctieRolFamilies();
                List<IMDTORefCodeDetail> frNiveaus = IMBLMetadata.GetAllFunctieRolNiveaus();
                List<IMDTORefCodeDetail> frGroepen = IMBLMetadata.GetAllFunctieRolGroepen();

                //set data to grids
                KaderStore.DataSource = frKaders;
                KaderStore.DataBind();
                FamilieStore.DataSource = frFamilies;
                FamilieStore.DataBind();
                NiveauStore.DataSource = frNiveaus;
                NiveauStore.DataBind();
                GroepStore.DataSource = frGroepen;
                GroepStore.DataBind();
                FunctieRollenStore.DataSource = functieRollen;
                FunctieRollenStore.DataBind();

                //set data to combo stores
                KaderCombo.DataSource = frKaders;
                KaderCombo.DataBind();
                FamilieCombo.DataSource = frFamilies;
                FamilieCombo.DataBind();
                NiveauCombo.DataSource = frNiveaus;
                NiveauCombo.DataBind();
                GroepCombo.DataSource = frGroepen;
                GroepCombo.DataBind();


            }

        }

        public void AddFunctieRol(object sender, DirectEventArgs e)
        {
        }

        protected void HandleChanges(object sender, BeforeStoreChangedEventArgs e)
        {
            ChangeRecords<IMDTOFunctieRol> functierollen = e.DataHandler.ObjectData<IMDTOFunctieRol>();

            foreach (IMDTOFunctieRol created in functierollen.Created)
            {
                int tempId = created.idFunctieRol;
                int newId = IMBLMetadata.AddFunctieRol(created);
                if (FunctieRollenStore.UseIdConfirmation)
                {
                    e.ConfirmationList.ConfirmRecord(tempId.ToString(), newId.ToString());
                }
                else
                {
                    FunctieRollenStore.UpdateRecordId(tempId, newId);
                }

            }

            foreach (IMDTOFunctieRol deleted in functierollen.Deleted)
            {
                IMBLMetadata.DeleteFunctieRol(deleted.idFunctieRol);

                if (FunctieRollenStore.UseIdConfirmation)
                {
                    e.ConfirmationList.ConfirmRecord(deleted.idFunctieRol.ToString());
                }
            }

            foreach (IMDTOFunctieRol updated in functierollen.Updated)
            {
                IMBLMetadata.UpdateFunctieRol(updated);

                if (FunctieRollenStore.UseIdConfirmation)
                {
                    e.ConfirmationList.ConfirmRecord(updated.idFunctieRol.ToString());
                }
            }
            e.Cancel = true;
        }

        public void HandleRefCodeChanges(object sender, BeforeStoreChangedEventArgs e)
        {
            ChangeRecords<IMDTORefCodeDetail> refcodes = e.DataHandler.ObjectData<IMDTORefCodeDetail>();
            Store senderStore = (Store)sender;

            foreach (IMDTORefCodeDetail created in refcodes.Created)
            {
                int tempId = created.idRefCodeDetail;
                int newId = IMBLMetadata.AddRefCodeDetail(created);
                if (senderStore.UseIdConfirmation)
                {
                    e.ConfirmationList.ConfirmRecord(tempId.ToString(), newId.ToString());
                }
                else
                {
                    senderStore.UpdateRecordId(tempId, newId);
                }

            }

            foreach (IMDTORefCodeDetail deleted in refcodes.Deleted)
            {
                IMBLMetadata.DeleteRefCodeDetail(deleted.idRefCodeDetail);

                if (senderStore.UseIdConfirmation)
                {
                    e.ConfirmationList.ConfirmRecord(deleted.idRefCodeDetail.ToString());
                }
            }

            foreach (IMDTORefCodeDetail updated in refcodes.Updated)
            {
                IMBLMetadata.UpdateRefCodeDetail(updated);

                if (senderStore.UseIdConfirmation)
                {
                    e.ConfirmationList.ConfirmRecord(updated.idRefCodeDetail.ToString());
                }
            }
            e.Cancel = true;
        }

        public void KaderStore_Refresh(object sender, StoreRefreshDataEventArgs e)
        {
            List<IMDTORefCodeDetail> frKaders = IMBLMetadata.GetAllFunctieRolKaders();
            KaderStore.DataSource = frKaders;
            KaderStore.DataBind();
            KaderCombo.DataSource = frKaders;
            KaderCombo.DataBind();
        }

        public void FamilieStore_Refresh(object sender, StoreRefreshDataEventArgs e)
        {
            List<IMDTORefCodeDetail> frFamilies = IMBLMetadata.GetAllFunctieRolFamilies();
            FamilieStore.DataSource = frFamilies;
            FamilieStore.DataBind();
            FamilieCombo.DataSource = frFamilies;
            FamilieCombo.DataBind();
            
        }

        public void NiveauStore_Refresh(object sender, StoreRefreshDataEventArgs e)
        {
            List<IMDTORefCodeDetail> frNiveaus = IMBLMetadata.GetAllFunctieRolNiveaus();
            NiveauStore.DataSource = frNiveaus;
            NiveauStore.DataBind();
            NiveauCombo.DataSource = frNiveaus;
            NiveauCombo.DataBind();
        }

        public void GroepStore_Refresh(object sender, StoreRefreshDataEventArgs e)
        {
            List<IMDTORefCodeDetail> frGroepen = IMBLMetadata.GetAllFunctieRolGroepen();
            GroepStore.DataSource = frGroepen;
            GroepStore.DataBind();
            GroepCombo.DataSource = frGroepen;
            GroepCombo.DataBind();
        }
    }
}